package jalgebrava.util;

/**
 * If a class implements this interface, it is willing to implement the interesting functions of
 * {@link java.lang.Object} for the parameter type.
 * @param <T>
 */
public interface ProvidesObjectDelegates<T> {
	/**
	 * Provide an {@link java.lang.Object#hashCode()} implementation.
	 * @param x 
	 * @return x.hashCode()
	 */
	int hashCode(T x);
	/**
	 * Provide an {@link java.lang.Object#equals(Object)} implementation.
	 * @param x 
	 * @param y
	 * @return x.equals(y)
	 */
	boolean equals(T x, T y);
	/**
	 * Provide an {@link java.lang.Object#toString()} implementation.
	 * @param x
	 * @return x.toString();
	 */
	String toString(T x);
	
}
